package cn.com.yiqi.wsc.service.item;

import cn.com.yiqi.wsc.common.Result;
import cn.com.yiqi.wsc.dao.item.criteria.ItemCheckCriteria;
import cn.com.yiqi.wsc.dao.item.criteria.ItemCriteria;
import cn.com.yiqi.wsc.dao.item.criteria.ItemTypeCriteria;
import cn.com.yiqi.wsc.dao.order.criteria.OrderCriteria;
import cn.com.yiqi.wsc.entity.item.*;
import cn.com.yiqi.wsc.entity.order.OutPutOrderItemDTO;
import cn.com.yiqi.wsc.enumeration.ItemStatusEnum;

import java.util.List;

/**
 * @author 何刚
 * @ClassName: ${class}
 * @Description: TODO
 * @date 2017/3/6
 */
public interface PortalItemService {


    /**
     * 商品组件树
     *
     * @return
     */
    Result<List<ItemTree>> tree();

    /**
     * 添加
     *
     * @param itemDTO
     * @return
     */
    Result insert(ItemDTO itemDTO, Integer userId);

    /**
     * 详情
     *
     * @param itemCriteria
     * @return
     */
    Result detail(ItemCriteria itemCriteria);

    /**
     * 修改
     *
     * @param itemDTO
     * @return
     */
    Result update(ItemDTO itemDTO, Integer userId);

    /**
     * 提交
     *
     * @param itemDTO
     * @return
     */
    Result submit(ItemDTO itemDTO, Integer userId);


    /**
     * 删除
     *
     * @param item
     * @return
     */
    Result delete(Item item);

    /**
     * 分页查询
     *
     * @param criteria
     * @return
     */
    Result pageList(ItemCriteria criteria);


    /**
     * 添加类型
     *
     * @param itemType
     * @return
     */
    Result insertType(ItemType itemType);

    /**
     * 修改类型
     *
     * @param itemType
     * @return
     */
    Result updateType(ItemType itemType);

    /**
     * 删除类型
     *
     * @param itemType
     * @return
     */
    Result deleteType(ItemType itemType);

    /**
     * 查询类型
     *
     * @param criteria
     * @return
     */
    Result getItemTypeByPid(ItemTypeCriteria criteria);


    /**
     * 添加属性
     *
     * @param itemTypePropertyAdminDTO
     * @return
     */
    Result propertyInsert(ItemTypePropertyAdminDTO itemTypePropertyAdminDTO);

    /**
     * 修改属性
     *
     * @param itemTypePropertyAdminDTO
     * @return
     */
    Result propertyUpdate(ItemTypePropertyAdminDTO itemTypePropertyAdminDTO);

    /**
     * 删除属性
     *
     * @param itemTypePropertyAdminDTO
     * @return
     */
    Result propertyDelete(ItemTypePropertyAdminDTO itemTypePropertyAdminDTO);

    /**
     * 根据typeId获取当前属性
     *
     * @param criteria
     * @return
     */
    Result getItemTypePropertyByItemTypeId(ItemTypeCriteria criteria);

    /**
     * 审核商品
     *
     * @param itemCheck
     * @return
     */
    Result checkItem(ItemCheck itemCheck, Integer userId);


    /**
     * 审核列表
     *
     * @param itemCheckCriteria
     * @return
     */
    Result checkList(ItemCheckCriteria itemCheckCriteria);


    /**
     * 根据seq 获取所有的属性
     *
     * @param criteria
     * @return
     */
    Result getItemTypePropertyByItemTypeSeq(ItemTypeCriteria criteria);


    /**
     * 根据typeId获取seq
     *
     * @param typeId
     * @return
     */
    String getSeqByTypeId(Integer typeId);

    /**
     * 上线商品
     *
     * @param itemDTO
     * @param currentUserId
     * @return
     */
    Result onLine(ItemDTO itemDTO, Integer currentUserId);

    /**
     * 下线商品
     *
     * @param itemDTO
     * @param currentUserId
     * @return
     */
    Result offLine(ItemDTO itemDTO, Integer currentUserId);

    /**
     * 获取商品状态
     *
     * @param itemId
     * @return
     */
    ItemStatusEnum getStatusByItemId(Integer itemId);

    /**
     * 导出商品
     *
     * @param criteria
     * @return
     */
    List<ItemDTO> outPutItemList(ItemCriteria criteria);

    /**
     * 是不是服务类型的商品
     *
     * @param typeId
     * @return
     */
    boolean isServiceItem(Integer typeId);


    /**
     * 导出订单商品
     *
     * @param orderCriteria
     * @return
     */
    List<OutPutOrderItemDTO> outPutOrderItem(OrderCriteria orderCriteria);

}
